#include<stdio.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include <unistd.h>
#include<stdlib.h>
#include <string.h>
#define MSG_NAME "./msg_file"
#define MSGSIZE 1024
struct msgbuf
{
    long mtype;
    char mtext[MSGSIZE];
};

int main(int argc,char **argv)
{

    key_t key;
    key=ftok(MSG_NAME,'k');
    int msgid=msgget(key,0655|IPC_CREAT);

    if(msgid<0)
    {
        perror("msgget error\n");
        exit(1);
    }

    pid_t pid;
    pid = fork();
    if(pid<0)
    {
        perror("fork error\n");
        exit(1);
    }
    if (pid == 0)
    {
        char buf[1024];
        struct msgbuf msg;
        scanf("%s",buf);
        msg.mtype=1;
        strcpy(msg.mtext,buf);
        msgsnd(msgid,&msg,sizeof(msg),0);
    }
    else if(pid > 0 )   
    {
        struct msgbuf msg;
        msgrcv(msgid,&msg,sizeof(msg),1,0);
        printf("%s\n",msg.mtext);
        msgctl(msgid,IPC_RMID,NULL);
    }
    return 0;
} 